題目:
Given a string s, find the length of the longest substring without duplicate characters.
給定一個字串,找出最長s的長度 子字串沒有重複的字元。
題目重點
輸入:一個字串 s。
輸出:最長 不包含重複字元 的子字串長度。
關鍵:不能有重複字元、子字串必須連續。
思路拆解
直覺做法 (Brute Force)
枚舉所有子字串,再檢查是否有重複字元。
時間複雜度 O(n³) → 太慢,不適合大字串。
優化想法:
我們要的是「連續」子字串,適合用 滑動視窗 (Sliding Window)。
用兩個指標 left 和 right,維護一個「不含重複字元的區間」。
處理重複:
當 right 指向的新字元已經存在於視窗裡,代表有衝突。
這時候要把 left 往右移,並從集合裡移除左邊字元,直到沒有重複為止。
更新答案:
每次 right 移動後,當前視窗的長度 = right - left + 1。
用 maxLen 記錄最大值。
視覺化例子
字串 "abcabcbb"
開始:left=0, right=0 → 視窗 "a" → 長度=1
right=1 → "ab" → 長度=2
right=2 → "abc" → 長度=3
right=3 → "abca" → 有重複 "a" → 移動 left → "bca" → 長度=3
right=4 → "bcab" → 有重複 "b" → 移動 left → "cab" → 長度=3
… 最後最大長度 = 3